package com.dz.lm.dao.product.read;

import com.dz.lm.common.exception.DaoException;
import com.dz.lm.common.utils.stereotype.ReaderRepository;
import com.dz.lm.domain.product.Product;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@ReaderRepository("readProductDao")
public interface ProductDao {
    int deleteByPrimaryKey(Integer productId);

    int insert(Product record);

    int insertSelective(Product record);

    Product selectByPrimaryKey(Map<String, Object> param) throws DaoException;

    int updateByPrimaryKeySelective(Product record);

    int updateByPrimaryKey(Product record);

    List<Product> listProduct(@Param("status") Byte status,
                              @Param("offset") Integer offset,
                              @Param("pageSize") Integer pageSize);

    List<Product> listHotProduct();

    List<Product> listSelectedProduct();
   
    List<Map<String, Object>> qryProductList(Map<String, Object> qryParam) throws DaoException;
    
    Integer qryProductListCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询创建与代理的产品列表
     */
    List<Map<String, Object>> qryProductList1(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询创建与代理的产品列表数据总条数
     */
    Integer qryProductListCount1(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询创建的产品列表
     */
    List<Map<String, Object>> qryProductList2(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询创建的产品列表的数据总条数
     */
    Integer qryProductListCount2(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询代理的产品列表
     */
    List<Map<String, Object>> qryProductList3(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询代理的产品列表的数据总条数
     */
    Integer qryProductListCount3(Map<String, Object> qryParam) throws DaoException;
    /**
     * 创建的产品的代理产品列表
     */
    List<Map<String, Object>> agentProductList(Map<String, Object> qryParam) throws DaoException;
    /**
     * 创建的产品的代理产品条数
     */
    Integer agentProductListCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询代理产品信息
     */
    Map<String, Object> qryAgentProductInfo(Map<String, Object> param) throws DaoException;
    /**
     * 查询代理产品信息
     */
    Map<String, Object> qryAgentProductInfoByProductId(Integer productId) throws DaoException;
    /**
     * 查询某产品是否已被代理人申请
     */
    int qryAgentProductCountByAgentId(Map<String, Object> param) throws DaoException;
    /**
     * 查询产品是否已被代理人取消代理
     */
    Map<String, Object> qryAgentProductStateByAgentId(Map<String, Object> param) throws DaoException;
    /**
     * 查询某产品是否是代理人创建
     */
    int qryProductCountByAgentId(Map<String, Object> param) throws DaoException;
    /**
     * 查询代理产品信息
     */
    Map<String, Object> qryAgentProduct(Map<String, Object> param) throws DaoException;
    /**
     * 查询已申请代理、可发布的产品列表
     */
    List<Map<String, Object>> qryReleasableProducts(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询当前用户创建的产品列表
     */
    List<Map<String, Object>> qryMyProductList(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询当前用户创建的产品总数
     */
    Integer qryMyProductListCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询当前用户代理的产品列表
     */
    List<Map<String, Object>> qryMyAgentProductList(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询当前用户代理的产品总数
     */
    Integer qryMyAgentProductListCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 获取创建的产品的申请信息列表
     */
    List<Map<String, Object>> qryMyProductApplyList(Map<String, Object> qryParam) throws DaoException;
    /**
     * 获取创建的产品的申请信息总数
     */
    Integer qryMyProductApplyListCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 获取用户创建的和代理的产品及需求信息
     */
    List<Map<String, Object>> qryUserHomeProducts(Map<String, Object> qryParam) throws DaoException;
    /**
     * 获取用户创建的和代理的产品及需求信息总数
     */
    Integer qryUserHomeProductsCount(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询当前用户创建最大产品ID
     */
    Map<String, Object> qryMyMaxProductId(Map<String, Object> qryParam) throws DaoException;
    /**
     * 查询产品信息
     */
    Map<String, Object> qryProductInfoByProductId(Map<String, Object> param) throws DaoException;
    /**
     * 获取用户一级代理待审核产品列表
     */
    List<Map<String, Object>> qryUnAuditProductList(Map<String, Object> qryParam) throws DaoException;
    /**
     * 通过上级产品ID查询某个代理人所代理的产品ID
     */
    Map<String, Object> qryProductInfoByAgentProductId(Map<String, Object> param) throws DaoException;
    
    /**
     * 获取用户一级代理产品列表
     */
    List<Map<String, Object>> qry1LevelAgentProductList(Map<String, Object> qryParam) throws DaoException;
}